package net.zjitc.servlet.datasource.book;

import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;

import java.util.List;

/**
 * @Author Administrator
 * @Date 2020/5/26 16:20
 * dao层的实现类
 *具体实现book对象的增删改查操作
 **/
public class BookDaoDB implements BookDao {
    /*spring框架提供的JdbcTemplate*/
    JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());

    String sql = "";

    @Override
    public int insert(Book book) {
        /*用户名不能重复
        1.调用方法判断用户名是否重复
        若返回值为空，表示不重复
        1.准备sql
        * 2.利用JdbcTemplate执行sql语句
        3.返回i（添加是否成功）
        否则，表示重复
        返回-1*/
        Book b = selectByName(book.getName());
        if (b == null) {
            sql = "insert into book(name,press,author,price) values(?,?,?,?)";
            /*执行增删改操作使用update方法
             * 传来sql，参数*/
            int i = template.update(sql, book.getName(), book.getPress(), book.getAuthor(), book.getPrice());

            return i;
        } else {
            return -1;
        }
    }

    @Override
    public Book selectByName(String name) {
        /*1.准备select语句
         * 2.对于查询语句，使用template的;
         * 1)queryForObject() 基本上返回结果是单条记录（对象）或者没有
         * 2）query（）返回多条记录（集合List）或null
         * 这2个方法都需要传入3类参数
         * 参数1 ：sql
         * 参数2：new BeanPropertyRowMapper<Book>(Book.class)
         * 作用：查询出数据库中的一条记录，自动封装成Book对象
         * 参数3：给？占位符赋值
         * 有几个？，就有几个赋值*/

        sql = "select * from book where name=?";
        try {
            Book book = template.queryForObject(sql, new BeanPropertyRowMapper<Book>(Book.class), name);
            return book;
        } catch (Exception e) {
            System.out.println(e.getMessage());
            return null;
        }
    }

    @Override
    public List<Book> selectAll() {
        sql = "select * from book";
        try {
            return template.query(sql, new BeanPropertyRowMapper<Book>(Book.class));
        } catch (Exception e) {
            System.out.println(e.getMessage());
            return null;
        }

    }


    @Override
    public int update(int id, Book book) {
        sql="update book set name=?,press=?,author=?,price=? where name=?,press=?,author=?,price=?";
        return template.update(sql,book.getName(),
                book.getPress(),book.getAuthor(),book.getPrice(),book.getId());
    }

    @Override
    public int delete(int id) {
        sql="delete from book where id=?";
        return template.update(sql,id);
    }
}
